iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

LeetCode-30 Days of JavaScript系列 第 24

LeetCode JS30-Day24 | 2724. Sort By 排序

  • 分享至 

  • xImage
  •  

LeetCode JS30-Day24 | 2724. Sort By Easy

Description❓

Given an array arr and a function fn, return a sorted array sortedArr. You can assume fn only returns numbers and those numbers determine the sort order of sortedArr. sortedArray must be sorted in ascending order by fn output.

You may assume that fn will never duplicate numbers for a given array.

給定一個陣列arr和一個函數fn作為參數,回傳一個排序陣列sortedArr
可以假設fn僅傳回數字,並且這些數字決定sortedArr的排序順序。
sortedArray 必須按 fn 輸出 "升序排序"。

Input: arr = [5, 4, 1, 2, 3], fn = (x) => x
Output: [1, 2, 3, 4, 5]

可假設fn永遠不會重複給定數組的數字。

Points

Solution✍️

[ ▶️挑戰這一題 ][ 本日代碼 ]

根據函數 fn 的返回值對數組 arr 進行升序排序,並返回排序後的新數組。

const sortBy =function(arr, fn) {
    //排序的邏輯
    return arr.slice().sort((a, b) => fn(a) - fn(b));
}
  • arr.slice()
    沒有傳遞任何參數時,將返回原始數組 arr 的淺拷貝(shallow copy),這是一種常用於復制數組的方法。
    這意味著它會創建一個新數組,包含原數組中的所有元素,並將這些元素複製到新數組中,但不會影響原始數組。

  • .sort((a, b) => fn(a) - fn(b))
    陣列的 sort 方法,該方法接受一個比較函數作為參數。
    計算了fn(a) - fn(b)這兩個返回值的差值,這將成為排序的依據。
    => 如果差值為負數,則 a 應該排在 b 前面,
    如果差值為正數,則 b 應該排在 a 前面,
    如果差值為零,則它們保持相對順序不變。 最後,函數返回了排序後的新數組。
    => 範例

    const fruits = ['apple', 'banana', 'cherry', 'date'];
    fruits.sort();
    // 陣列现在按字母顺序排序:['apple', 'banana', 'cherry', 'date']
    
    const numbers = [5, 2, 9, 1, 5];
    numbers.sort((a, b) => a - b);
    // numbers 数组现在升序排序:[1, 2, 5, 5, 9]
    numbers.sort((a, b) => b - a);
    // numbers 数组现在降序排序:[9, 5, 5, 2, 1]
    

Testcase

let arr = [5, 4, 1, 2, 3] ;
let fn = (x) => x;
let result = sortBy(arr,fn);
console.log(JSON.stringify(result));   
//輸出[1, 2, 3, 4, 5]

arr = [{"x": 1}, {"x": 0}, {"x": -1}];
fn = (d) => d.x;
result = sortBy(arr,fn);
console.log(JSON.stringify(result));  
//輸出[{"x":-1},{"x":0},{"x":1}]

arr = [[3, 4], [5, 2], [10, 1]];
fn = (x) => x[1];
result = sortBy(arr,fn);
console.log(JSON.stringify(result)); 
//輸出 [[10,1],[5,2],[3,4]]

上一篇
LeetCode JS30-Day23 | 2631. Group By 分組
下一篇
LeetCode JS30-Day25 | 2722. Join Two Arrays by ID 根據ID合併兩個陣列
系列文
LeetCode-30 Days of JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言